'''
主代码测试--类封装
'''
import numpy as np
import os
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d
import Env.EnvMain as env

print(os.getcwd())

class test11:
    def __init__(self):
        pass

    def main(self):
        # 传参，初始化，并进行绘图准备
        A = env.ACEnv(1,1)

        for k in range(10):
             # 需要引入包from mpl_toolkits.mplot3d import axes3d，才能使用projection='3d'的取值

            # 初始化环境，并输出环境的主要参数
            print('第1步')
            print('初始化')
            a = A.reset()
            # 将敌我双方拉至攻击边界
            print('第2步')
            zw=np.random.randint(0,120)
            b = A.FirstStep([[0,zw]])
            A.move()    # 去除坐标列表中的初始化占位坐标
            fig = plt.figure()
            ax = fig.add_subplot(111, projection='3d')
            A.render(fig,ax)
             # 进行每回合的仿真
            print('第3步')
            c = A.step([[[-0.1,-0.17]], [[0]]]) # 第二个列表不是攻击状态，而是攻击策略

            plt.clf()       # 清除前一回合图像
            ax = fig.add_subplot(111, projection='3d')  # 重新建立三维坐标
            A.render(fig,ax)

            print('第4步')
            c = A.step([[[-0.02,0.13]], [[1]]])

            plt.clf()       # 清除前一回合图像
            ax = fig.add_subplot(111, projection='3d')  # 重新建立三维坐标
            A.render(fig,ax)

            done=True
            iii=0
            # 多次循环step()
            while iii==200 or done:
                num = iii + 5
                print('第 %d 步' % num)
                para = []
                angle = []
                policy = []
                rate = 0.9      # 设置随机率，用以将攻击策略转化为1的标准
                friends = A.friends     # 用于获取空中单位的存活状态和载弹量状态
                enemies = A.enemies     # 用于获取地面单位的存活状态

                '''设置机动动作矩阵'''

                Ang = np.random.uniform(-0.17, 0.17, 2)
                angle.append(Ang)
                '''设置攻击动作矩阵'''
                D = [0]  # 生成初始攻击策略矩阵
                R = np.random.uniform(0, 1)     # 设置随机率
                '''判断空中单位的损伤状态，载弹量和地面单位的损伤状态对攻击策略的影响'''
                if friends[0].live == 1 and friends[0].NumberOfMissile > 0:
                    if enemies[0].live == 1 and R <= rate:
                        D[0] = 1
                    policy.append(D)
                para.append(angle)
                para.append(policy)

                _,_,done = A.step(para)

                plt.clf()  # 清除前一回合图像
                ax = fig.add_subplot(111, projection='3d')  # 重新建立三维坐标
                A.render(fig, ax)
                iii+=1


            # plt.ioff()
            # plt.show()
            plt.savefig('Env/Records/figs/'+str(k)+'.png')
            plt.close()
            A.excel_save()

